<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>等性运算符</title>
    <script>
        /*
        判断两个变量是否相等是程序设计中非常重要的运算。在处理原始值时，这种运算相当简单，
        但涉及对象，任务就稍有点复杂。
        ECMAScript 提供了两套等性运算符：等号和非等号用于处理原始值，全等号和非全等号用于处理对象。
        在 ECMAScript 中，等号由双等号（==）表示，当且仅当两个运算数相等时，它返回 true。非等号由感叹号加等号（!=）表示，当且仅当两个运算数不相等时，它返回 true。为确定两个运算数是否相等，这两个运算符都会进行类型转换。

        执行类型转换的规则如下：

        如果一个运算数是 Boolean 值，在检查相等性之前，把它转换成数字值。false 转换成 0，true 为 1。
        如果一个运算数是字符串，另一个是数字，在检查相等性之前，要尝试把字符串转换成数字。
        如果一个运算数是对象，另一个是字符串，在检查相等性之前，要尝试把对象转换成字符串。
        如果一个运算数是对象，另一个是数字，在检查相等性之前，要尝试把对象转换成数字。
        在比较时，该运算符还遵守下列规则：

        值 null 和 undefined 相等。
        在检查相等性时，不能把 null 和 undefined 转换成其他值。
        如果某个运算数是 NaN，等号将返回 false，非等号将返回 true。
        如果两个运算数都是对象，那么比较的是它们的引用值。如果两个运算数指向同一对象，那么等号返回 true，否则两个运算数不等。
        重要提示：即使两个数都是 NaN，等号仍然返回 false，因为根据规则，NaN 不等于 NaN。

        其实从这个层面讲 JavaScript 也是一种面向对象的语言 
        */
        function testEqual(){

        }

        /*
        全等号和非全等号
        等号和非等号的同类运算符是全等号和非全等号。这两个运算符所做的与等号和非等号相同，只是它们在检查相等性前，不执行类型转换。
        全等号由三个等号表示（===），只有在无需类型转换运算数就相等的情况下，才返回 true。
        */
        function testFullEqual(){
            var sNum = "66";
            var iNum = 66;
            alert(sNum == iNum);   // true
            alert(sNum === iNum);  //  false 
        }

    </script>
</head>
<body>
    <button onclick="testFullEqual()">测试等于和全等于的区别</button>
</body>
</html>